#include<bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
const int N=2e5+10;
#define INF 0x3f3f3f3f;
typedef long long int ll;
#define close(); std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
//----------------------------------------------------------------------------//
int f[2020];//第i个数字能被构造出来的总次数
void solve()
{
	f[0]=1;//构造1需要用到0
	for(int i=1;i*i<=2019;i++)
	{
		for(int j=2019;j>=i*i;j--)//拿上一层更新这一层
			f[j]=f[j]+f[j-i*i];//选i和不选i构造出j这个数字的总次数
	}
	cout<<f[2019]<<'\n';

	
}


int main()
{
	close();
	int T; cin>>T;
	while (T--) solve();
	return 0;
}